package com.jdbc;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author lenovo
 * @Description
 * @Date2025-2-25 16:03
 * 反射案例
 */
public class ReflectDemo {
    public static void main(String[] args){
        //1.获取Class对象
        Class clazz = Student.class;
        //2.创建对象
        try {
            Student student= (Student) clazz.newInstance();
            System.out.println(student);
            //3.获取方法
            Method[] methods = clazz.getDeclaredMethods();
            for(Method method:methods){
                System.out.println(method);
            }
            //4.获取特定的方法
            Method method=clazz.getDeclaredMethod("setName", String.class);
            //5.调用方法 对象，方法（参数）-->方法名。invoke（对象，参数）
            method.invoke(student,"张三");
            System.out.println(student);
            //6.获得所有属性
            Field[] fields=clazz.getDeclaredFields();
            for(Field field:fields){
                System.out.println(field.getType()+" " +field.getName());
            }
            //7.获得特定属性
            Field field = clazz.getDeclaredField("age");
            //8.设置属性的可访问性
            field.setAccessible(true);
            //9.调用属性的set方法 对象。属性名=xxx；
            field.set(student,18);


        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}
